/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.openide.src.nodes;
import java.awt.Component;
import java.beans.*;
import java.io.IOException;
import java.lang.reflect.Modifier;
import java.lang.reflect.InvocationTargetException;
import java.util.ResourceBundle;
import org.openide.TopManager;
import org.openide.src.*;
import org.openide.nodes.*;
import org.openide.util.NbBundle;
import org.openide.util.Utilities;
/** Node representing a constructor.
* @see ConstructorElement
* @author Petr Hamernik
*/
public class ConstructorElementNode extends MemberElementNode {
/** Create a new constructor node.
* @param element constructor element to represent
* @param writeable <code>true</code> to be writable
*/
public ConstructorElementNode(ConstructorElement element, boolean writeable) {
super(element, Children.LEAF, writeable);
setElementFormat (sourceOptions.getConstructorElementFormat());
}
/* Resolve the current icon base.
* @return icon base string.
*/
protected String resolveIconBase() {
int modif = ((ConstructorElement)element).getModifiers();
if (Modifier.isPrivate(modif))
return CONSTRUCTOR_PRIVATE;
else if (Modifier.isProtected(modif))
return CONSTRUCTOR_PROTECTED;
else if (Modifier.isPublic(modif))
return CONSTRUCTOR_PUBLIC;
else
return CONSTRUCTOR_PACKAGE;
}
/* This method resolve the appropriate hint format for the type
* of the element. It defines the short description.
*/
protected ElementFormat getHintElementFormat() {
return sourceOptions.getConstructorElementLongFormat();
}
/* Creates property set for this node */
protected Sheet createSheet () {
Sheet sheet = Sheet.createDefault();
Sheet.Set ps = sheet.get(Sheet.PROPERTIES);
ps.put(createModifiersProperty(writeable));
ps.put(createNameProperty(false));
ps.put(createParametersProperty(writeable));
ps.put(createExceptionsProperty(writeable));
return sheet;
}
/* Removes the element from the class and calls superclass.
*
* @exception IOException if SourceException is thrown
* from the underlayed Element.
*/
public void destroy() throws IOException {
if (!(element instanceof MethodElement)) {
SourceEditSupport.invokeAtomicAsUser(element, new SourceEditSupport.ExceptionalRunnable() {
public void run() throws SourceException {
ConstructorElement el = (ConstructorElement) element;
el.getDeclaringClass().removeConstructor(el);
}
});
}
super.destroy();
}
/** Indicate that this node cannot be renamed.
* An constructor must have the same name like class
* @return <code>false</code>
*/
public boolean canRename() {
return false;
}
public Component getCustomizer() {
return new MethodCustomizer((ConstructorElement)element);
}
public boolean hasCustomizer() {
return true;
}
/** Create a node property for constructor parameters.
* @param canW <code>false</code> to force property to be read-only
* @return the property
*/
protected Node.Property createParametersProperty(boolean canW) {
return new ElementProp(PROP_PARAMETERS, MethodParameter[].class, canW) {
/** Gets the value */
public Object getValue () {
return ((ConstructorElement)element).getParameters();
}
/** Sets the value */
public void setValue(final Object val) throws IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
super.setValue(val);
if (!(val instanceof MethodParameter[]))
throw new IllegalArgumentException();
runAtomic(element, new SourceEditSupport.ExceptionalRunnable() {
public void run() throws SourceException {
((ConstructorElement)element).setParameters((MethodParameter[])val);
}
});
}
};
}
/** Create a node property for constructor exceptions.
* @param canW <code>false</code> to force property to be read-only
* @return the property
*/
protected Node.Property createExceptionsProperty(boolean canW) {
return new ElementProp(PROP_EXCEPTIONS, Identifier[].class, canW) {
/** Gets the value */
public Object getValue () {
return ((ConstructorElement)element).getExceptions();
}
/** Sets the value */
public void setValue(final Object val) throws IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
super.setValue(val);
if (!(val instanceof Identifier[]))
throw new IllegalArgumentException();
runAtomic(element, new SourceEditSupport.ExceptionalRunnable() {
public void run() throws SourceException {
((ConstructorElement)element).setExceptions((Identifier[])val);
}
});
}
};
}
}
/*
* Log
* 12 src-jtulach1.11 11/29/99 Petr Hamernik customizers
* 11 src-jtulach1.10 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun
* Microsystems Copyright in File Comment
* 10 src-jtulach1.9 9/13/99 Petr Hamernik runAsUser implemented and
* used
* 9 src-jtulach1.8 7/6/99 Jesse Glick Removing unused imports.
* 8 src-jtulach1.7 6/8/99 Ian Formanek ---- Package Change To
* org.openide ----
* 7 src-jtulach1.6 4/30/99 Petr Hamernik property editors moved
* away
* 6 src-jtulach1.5 4/21/99 Petr Hamernik canRename returns false
* 5 src-jtulach1.4 4/20/99 Petr Hamernik constructor name is
* read-only
* 4 src-jtulach1.3 4/2/99 Jesse Glick [JavaDoc]
* 3 src-jtulach1.2 4/1/99 Jan Jancura Object browser support
* 2 src-jtulach1.1 3/18/99 Petr Hamernik
* 1 src-jtulach1.0 3/18/99 Petr Hamernik
* $
*/